#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 文件操作

// 创建文件：创建一个新的文件。
void createFile(const char *fileName)
{
    FILE *file = fopen(fileName, "w");
    if (file != NULL)
    {
        fclose(file);
        printf("File '%s' created successfully.\n", fileName);
    }
    else
    {
        perror("Error creating file");
    }
}

// 读取文件内容：打开文件并读取其中的数据。
void readFile(const char *fileName)
{
    FILE *file = fopen(fileName, "r");
    if (file != NULL)
    {
        char buffer[100]; // 用于存储读取的内容
        while (fgets(buffer, sizeof(buffer), file) != NULL)
        {
            printf("%s", buffer); // 打印读取的内容
        }
        fclose(file);
    }
    else
    {
        perror("Error reading file");
    }
}

// 写入文件内容：打开文件并将数据写入文件中。
void writeFile(const char *fileName, const char *content)
{
    FILE *file = fopen(fileName, "w");
    if (file != NULL)
    {
        fprintf(file, "%s", content);
        fclose(file);
        printf("Content written to file '%s' successfully.\n", fileName);
    }
    else
    {
        perror("Error writing to file");
    }
}

// 追加文件内容：将数据追加到已有文件的末尾。
void appendToFile(const char *fileName, const char *content)
{
    FILE *file = fopen(fileName, "a");
    if (file != NULL)
    {
        fprintf(file, "%s", content);
        fclose(file);
        printf("Content appended to file '%s' successfully.\n", fileName);
    }
    else
    {
        perror("Error appending to file");
    }
}

// 关闭文件：关闭已打开的文件。
void closeFile(FILE *file)
{
    if (file != NULL)
    {
        fclose(file);
        printf("File closed successfully.\n");
    }
    else
    {
        printf("File is not open.\n");
    }
}

// 删除文件：从文件系统中删除指定的文件。
void deleteFile(const char *fileName)
{
    if (remove(fileName) == 0)
    {
        printf("File '%s' deleted successfully.\n", fileName);
    }
    else
    {
        perror("Error deleting file");
    }
}

// 文件夹操作

// // 创建文件夹：在指定路径下创建一个新的文件夹。
// void createDirectory(const char *directoryName)
// {
// #ifdef _WIN32
//     if (CreateDirectory(directoryName, NULL))
//     {
//         printf("Directory '%s' created successfully.\n", directoryName);
//     }
//     else
//     {
//         perror("Error creating directory");
//     }
// #else
//     if (mkdir(directoryName, 0777) == 0)
//     {
//         printf("Directory '%s' created successfully.\n", directoryName);
//     }
//     else
//     {
//         perror("Error creating directory");
//     }
// #endif
// }

// 读取文件夹内容：遍历文件夹中的文件和子文件夹。
void readDirectory(const char *directoryPath)
{
    // TODO: 实现读取文件夹内容的代码
}

// 复制文件夹：将一个文件夹完整地复制到目标位置。
void copyDirectory(const char *sourcePath, const char *destinationPath)
{
    // TODO: 实现复制文件夹的代码
}

// 移动文件夹：将一个文件夹移动到新位置。
void moveDirectory(const char *sourcePath, const char *destinationPath)
{
    // TODO: 实现移动文件夹的代码
}

// 重命名文件夹：更改文件夹的名称。
void renameDirectory(const char *oldDirectoryName, const char *newDirectoryName)
{
    // TODO: 实现重命名文件夹的代码
}

// 删除文件夹：从文件系统中删除指定的文件夹。
void deleteDirectory(const char *directoryName)
{
    // TODO: 实现删除文件夹的代码
}

// 其他常规操作

// 检查文件是否存在：检查指定路径下的文件是否存在。
int isFileExist(const char *fileName)
{
    FILE *file = fopen(fileName, "r");
    if (file != NULL)
    {
        fclose(file);
        return 1; // 文件存在
    }
    return 0; // 文件不存在
}

// 重命名文件：将文件的名称更改为新的名称。
void renameFile(const char *oldFileName, const char *newFileName)
{
    if (rename(oldFileName, newFileName) == 0)
    {
        printf("File name changed from '%s' to '%s' successfully.\n", oldFileName, newFileName);
    }
    else
    {
        perror("Error changing file name");
    }
}

// 复制文件：将一个文件复制到目标位置。
void copyFile(const char *sourcePath, const char *destinationPath)
{
    FILE *sourceFile = fopen(sourcePath, "rb");
    FILE *destinationFile = fopen(destinationPath, "wb");
    if (sourceFile != NULL && destinationFile != NULL)
    {
        char buffer[1024];
        size_t bytesRead;
        while ((bytesRead = fread(buffer, 1, sizeof(buffer), sourceFile)) > 0)
        {
            fwrite(buffer, 1, bytesRead, destinationFile);
        }
        fclose(sourceFile);
        fclose(destinationFile);
        printf("File '%s' copied to '%s' successfully.\n", sourcePath, destinationPath);
    }
    else
    {
        perror("Error copying file");
    }
}

// 移动文件：将一个文件移动到新位置。
void moveFile(const char *sourcePath, const char *destinationPath)
{
    if (rename(sourcePath, destinationPath) == 0)
    {
        printf("File '%s' moved to '%s' successfully.\n", sourcePath, destinationPath);
    }
    else
    {
        perror("Error moving file");
    }
}

// 获取文件属性：获取文件的大小、创建时间等属性信息。
void getFileAttributes(const char *fileName)
{
    // TODO: 实现获取文件属性的代码
}

int main()
{
    // 示例用法
    const char *directoryName = "example_directory";
    const char *fileName = "example.txt";
    const char *newFileName = "renamed_example.txt";
    const char *content1 = "Hello, World!\n";
    const char *content2 = "Additional content.\n";
    const char *sourceFilePath = "source.txt";
    const char *destinationFilePath = "destination.txt";

    // 文件操作
    createFile(fileName);
    writeFile(fileName, content1);
    appendToFile(fileName, content2);
    readFile(fileName);
    deleteFile(fileName);

    // 文件夹操作
    // createDirectory(directoryName);
    readDirectory(directoryName);
    copyDirectory(directoryName, "new_directory");
    moveDirectory("new_directory", "moved_directory");
    renameDirectory(directoryName, "renamed_directory");
    deleteDirectory("moved_directory");

    // 其他常规操作
    printf("File %s exist.\n", isFileExist(sourceFilePath) ? "does" : "does not");
    renameFile(sourceFilePath, "new_name.txt");
    copyFile("new_name.txt", destinationFilePath);
    moveFile("new_name.txt", "moved_file.txt");
    getFileAttributes("moved_file.txt");

    return 0;
}
